package com.ltmonitor.web.util;


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;


public final  class FileToZip {
	 private FileToZip(){}  

	    /** 
	     * 将存放在sourceFilePath目录下的源文件，打包成fileName名称的zip文件，并存放到zipFilePath路径下 
	     * @param sourceFilePath :待压缩的文件路径 
	     * @param zipFilePath :压缩后存放路径 
	     * @param fileName :压缩后文件的名称 
	     * @return 
	     */  
	    public static boolean fileToZip(String sourceFilePath,String zipFilePath,String fileName){  
	        boolean flag = false;  
	        File sourceFile = new File(sourceFilePath);  
	        FileInputStream fis = null;  
	        BufferedInputStream bis = null;  
	        FileOutputStream fos = null;  
	        ZipOutputStream zos = null;  

	        if(sourceFile.exists() == false){  
	            System.out.println("待压缩的文件目录："+sourceFilePath+"不存在.");  
	            sourceFile.mkdir(); // 新建目录
	        }  
	        try {  
	            File zipFile = new File(zipFilePath + "/" + fileName +".zip");  
	            if(zipFile.exists()){  
	                System.out.println(zipFilePath + "目录下存在名字为:" + fileName +".zip" +"打包文件.");  
	            }else{  
	                File[] sourceFiles = sourceFile.listFiles();  
	                if(null == sourceFiles || sourceFiles.length<1){  
	                    System.out.println("待压缩的文件目录：" + sourceFilePath + "里面不存在文件，无需压缩.");  
	                }else{  
	                    fos = new FileOutputStream(zipFile);  
	                    zos = new ZipOutputStream(new BufferedOutputStream(fos));  
	                    byte[] bufs = new byte[1024*10];  
	                    for(int i=0;i<sourceFiles.length;i++){  
	                        //创建ZIP实体，并添加进压缩包  
	                        ZipEntry zipEntry = new ZipEntry(sourceFiles[i].getName());  
	                        zos.putNextEntry(zipEntry);  
	                        //读取待压缩的文件并写进压缩包里  
	                        fis = new FileInputStream(sourceFiles[i]);  
	                        bis = new BufferedInputStream(fis, 1024*10);  
	                        int read = 0;  
	                        while((read=bis.read(bufs, 0, 1024*10)) != -1){  
	                            zos.write(bufs,0,read);  
	                        }  
	                    }  
	                    flag = true;  
	                }  
	            }  
	        } catch (FileNotFoundException e) {  
	            e.printStackTrace();  
	            throw new RuntimeException(e);  
	        } catch (IOException e) {  
	            e.printStackTrace();  
	            throw new RuntimeException(e);  
	        } finally{  
	            //关闭流  
	            try {  
	                if(null != bis) bis.close();  
	                if(null != zos) zos.close();  
	            } catch (IOException e) {  
	                e.printStackTrace();  
	                throw new RuntimeException(e);  
	            }  
	        }  
	    return flag;  
	    } 


	    public static String filesToZip(List<File> fileList,String zipFilePath,String fileName) {
	    	String returnStr = "false";
	        FileInputStream fis = null;  
	        BufferedInputStream bis = null;  
	        FileOutputStream fos = null;  
	        ZipOutputStream zos = null;  
	        
	        try {
	        	
	        	//压缩文件存在
	        	if(fileList.size() >0) {
	        		File zipFile = new File(zipFilePath + "/" + fileName +".zip");  
		            if(!zipFile.exists()){ 
		            	//压缩文件不存在，
		            	fos = new FileOutputStream(zipFile);  
	                    zos = new ZipOutputStream(new BufferedOutputStream(fos));  
	                    byte[] bufs = new byte[1024*10]; 
	                    
	                    //遍历文件
					for (File file : fileList) {
						if (file.exists()) {
							// 创建ZIP实体，并添加进压缩包
							ZipEntry zipEntry = new ZipEntry(file.getName());
							zos.putNextEntry(zipEntry);
							// 读取待压缩的文件并写进压缩包里
							fis = new FileInputStream(file);
							bis = new BufferedInputStream(fis, 1024 * 10);
							int read = 0;
							while ((read = bis.read(bufs, 0, 1024 * 10)) != -1) {
								zos.write(bufs, 0, read);
							}
						}

					}
					returnStr = "true";
	                    
		            }else {
						//存在
		            	returnStr = "已经存在同名压缩文件";
		            	System.out.println("已经存在同名压缩文件");
					}
	        	}else {
					//不存在等待压缩文件
	        		returnStr = "不存在等待压缩的文件";
	        		System.out.println("不存在等待压缩的文件");
				}
				
			} catch (Exception e) {
				// TODO: handle exception
				returnStr = e.getMessage();
				e.printStackTrace();
			}finally {
				//关闭流  
	            try {  
	                if(null != bis) bis.close();  
	                if(null != zos) zos.close();  
	            } catch (IOException e) {  
	                e.printStackTrace();  
	                returnStr = e.getMessage();
	                throw new RuntimeException(e);  
	            }  
			}	
	    	return returnStr;
	    }

}
